package test

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"testing"
	"time"
)

// 测试文件处理功能
func testFilesHandle(t *testing.T) {
	// 创建测试目录和文件路径
	testDir := "d:\\code\\yanxue\\golang\\ai-agent-eino\\ai-mcp\\test_mcp_dir"
	testFile := testDir + "\\test_file.txt"
	appendFile := testDir + "\\append_test.txt"
	downloadFile := testDir + "\\download_test.txt"

	var err error

	fmt.Println("开始测试MCP文件处理工具...\n")

	// 测试1: 创建目录(如果不存在)
	fmt.Println("测试1: 创建目录(如果不存在)")
	// 移除未使用的变量
	fmt.Println()

	// 直接测试工具的核心功能
	fmt.Println("\n直接测试工具的核心功能:")

	// 测试1: 创建目录(如果不存在)
	fmt.Println("\n1. 测试创建目录(如果不存在):")
	err = os.MkdirAll(testDir, 0755)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		fmt.Println("成功: 目录创建或已存在")
	}
	// 测试2: 写入文件
	fmt.Println("\n2. 测试写入文件:")
	testContent := "这是测试内容 - " + time.Now().Format("2006-01-02 15:04:05")
	err = os.WriteFile(testFile, []byte(testContent), 0644)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		fmt.Println("成功: 文件写入成功")
	}
	fmt.Println()

	// 测试3: 读取文件
	fmt.Println("\n3. 测试读取文件:")
	content, err := os.ReadFile(testFile)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		fmt.Printf("成功: 文件内容 = %s\n", string(content))
	}
	// 测试4: 追加文件
	fmt.Println("\n4. 测试追加文件:")
	// 先创建文件
	err = os.WriteFile(appendFile, []byte("初始内容\n"), 0644)
	if err != nil {
		fmt.Printf("创建文件错误: %v\n", err)
	} else {
		// 以追加模式打开文件
		file, err := os.OpenFile(appendFile, os.O_APPEND|os.O_WRONLY, 0644)
		if err != nil {
			fmt.Printf("打开文件错误: %v\n", err)
		} else {
			defer file.Close()
			_, err = file.Write([]byte("追加的内容 - " + time.Now().Format("2006-01-02 15:04:05") + "\n"))
			if err != nil {
				fmt.Printf("追加内容错误: %v\n", err)
			} else {
				fmt.Println("成功: 文件追加成功")
				// 读取追加后的内容
				appendContent, _ := os.ReadFile(appendFile)
				fmt.Printf("追加后文件内容:\n%s\n", string(appendContent))
			}
		}
	}
	fmt.Println()

	// 测试5: 列出目录内容
	fmt.Println("\n5. 测试列出目录内容:")
	files, err := os.ReadDir(testDir)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		fmt.Println("成功: 目录内容列表:")
		for _, file := range files {
			fmt.Printf("- %s\n", file.Name())
		}
	}
	// 测试6: 删除文件
	fmt.Println("\n6. 测试删除文件:")
	err = os.Remove(testFile)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		fmt.Println("成功: 文件删除成功")
	}
	fmt.Println()

	// 测试7: 创建目录
	fmt.Println("\n7. 测试创建目录:")
	newDir := testDir + "\\new_subdir"
	err = os.Mkdir(newDir, 0755)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		fmt.Println("成功: 目录创建成功")
	}
	// 测试8: 删除目录
	fmt.Println("\n8. 测试删除目录:")
	err = os.RemoveAll(newDir)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		fmt.Println("成功: 目录删除成功")
	}
	fmt.Println()

	// 测试9: 从URL下载文件
	fmt.Println("\n9. 测试从URL下载文件:")
	// 简单的HTTP下载实现
	downloadURL := "https://www.example.com"
	resp, err := http.Get(downloadURL)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		defer resp.Body.Close()
		if resp.StatusCode == http.StatusOK {
			out, err := os.Create(downloadFile)
			if err != nil {
				fmt.Printf("创建文件错误: %v\n", err)
			} else {
				defer out.Close()
				_, err = io.Copy(out, resp.Body)
				if err != nil {
					fmt.Printf("写入文件错误: %v\n", err)
				} else {
					fmt.Println("成功: 文件下载成功")
				}
			}
		} else {
			fmt.Printf("错误: 下载失败，状态码: %d\n", resp.StatusCode)
		}
	}
	fmt.Println()

	// 清理: 删除所有测试文件和目录
	fmt.Println("清理测试环境...")
	os.Remove(appendFile)
	os.Remove(downloadFile)
	os.RemoveAll(testDir)
	fmt.Println("测试完成!")
}
